"""
数据分析案例实操

步骤：
1.设计一个数据类，用于定义数据的名字（定义成员变量），定义打印输出格式
2.设计一个抽象类作为顶层设计
3.在这个抽象类的基础上，设计两个不同文本的文件读取器，返回整理好的数据列表
4.在main文件中，开始读取文件（创建对象），进行逻辑计算（同一天的销售额合并），生成可视化图表
"""
from calendar import month

from pyecharts.globals import ThemeType
from pyecharts.options import TitleOpts, LabelOpts, InitOpts

from data_define import Record
from file_define import FileReader, TextFileReader, JsonFileReader
from pyecharts.charts import Bar

# 一、读取文件（创建对象，调用方法）
text_file = TextFileReader(r"C:\Users\Lenovo\OneDrive\桌面\2011年1月销售数据.txt")
json_file = JsonFileReader(r"C:\Users\Lenovo\OneDrive\桌面\2011年2月销售数据JSON.txt")

text_list = text_file.read_data()
json_list = json_file.read_data()

# 2.计算
# 格式为字典——>{"2011-01-01": 1534, "2011-01-02": 300, "2011-01-03": 650， ......}
all_list = text_list + json_list # 都是列表，先合并

all_dic = {}
for line in all_list:
    line.money = int(line.money)   # !注意! 记得转成数字类型而不是符号类型
    if line.date in all_dic.keys():
        # 如果时间键已存在，直接累加
        all_dic[line.date] += line.money
    else:
        # 若不存在，创建再赋值
        all_dic[line.date] = line.money

# 3.画图
## 创建柱状图对象
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))

## 传入x,y轴数据（列表的形式）
bar.add_xaxis(list(all_dic.keys()))    # 字典的所有键
bar.add_yaxis("销售额", list(all_dic.values()), label_opts=LabelOpts(is_show=False))  # 字典的所有值

## 全局设置（标题）
bar.set_global_opts(
    title_opts=TitleOpts(title="每日销售额")   # 在方法里面创建对象title_opts,此对象又使用方法TitleOpts,此方法里面有创建对象
)

## 生成图像
bar.render("每日销售额柱状图.html")

## 完成图的基础编写之后，可以去美化一下，##
# 例如：1.去掉数值的显示，因为太多太乱了——>y轴的“标签选项”；2.换主题颜色——>柱状图对象(初始选项，主题)